home *** CD-ROM | disk | FTP | other *** search
/ The Arsenal Files 4 / The Arsenal Files 4 (Arsenal Computer).ISO / ham / sattrk31.tgz / sattrack-3.1.tar / SatTrack / src / sattrack / sattele.c < prev    next >
C/C++ Source or Header  |  1995-03-16  |  14KB  |  377 lines

  1. /******************************************************************************/
  2. /*                                                                            */
  3. /*  Title       : sattele.c                                                   */
  4. /*  Author      : Manfred Bester                                              */
  5. /*  Date        : 14Feb94                                                     */
  6. /*  Last change : 15Mar95                                                     */
  7. /*                                                                            */
  8. /*  Synopsis    : Interface routines for controlling the ISI telescopes.      */
  9. /*                The main body of these routines will only be executed if    */
  10. /*                'ISI' is defined in 'sattrack.h'. This also requires a      */
  11. /*                corresponding change in the Makefile to allow the remote    */
  12. /*                procedure call interface routines to be linked.             */
  13. /*                                                                            */
  14. /*  If 'ISI' is undefined in 'sattrack.h', those lines of the following       */
  15. /*  functions that call certain other functions specific for the ISI          */
  16. /*  telescopes are commented out. This way the code can be compiled           */
  17. /*  elsewhere.                                                                */
  18. /*                                                                            */
  19. /*                                                                            */
  20. /*  SatTrack is Copyright (c) 1992, 1993, 1994, 1995 by Manfred Bester.       */
  21. /*  All Rights Reserved.                                                      */
  22. /*                                                                            */
  23. /*  Permission to use, copy, and distribute SatTrack and its documentation    */
  24. /*  in its entirety for educational, research and non-profit purposes,        */
  25. /*  without fee, and without a written agreement is hereby granted, provided  */
  26. /*  that the above copyright notice and the following three paragraphs appear */
  27. /*  in all copies. SatTrack may be modified for personal purposes, but        */
  28. /*  modified versions may NOT be distributed without prior consent of the     */
  29. /*  author.                                                                   */
  30. /*                                                                            */
  31. /*  Permission to incorporate this software into commercial products may be   */
  32. /*  obtained from the author, Dr. Manfred Bester, 1636 M. L. King Jr. Way,    */
  33. /*  Berkeley, CA 94709, USA. Note that distributing SatTrack 'bundled' in     */
  34. /*  with ANY product is considered to be a 'commercial purpose'.              */
  35. /*                                                                            */
  36. /*  IN NO EVENT SHALL THE AUTHOR BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, */
  37. /*  SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OF   */
  38. /*  THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE AUTHOR HAS BEEN ADVISED  */
  39. /*  OF THE POSSIBILITY OF SUCH DAMAGE.                                        */
  40. /*                                                                            */
  41. /*  THE AUTHOR SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING, BUT NOT      */
  42. /*  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A   */
  43. /*  PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS ON AN "AS IS"      */
  44. /*  BASIS, AND THE AUTHOR HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT, */
  45. /*  UPDATES, ENHANCEMENTS, OR MODIFICATIONS.                                  */
  46. /*                                                                            */
  47. /******************************************************************************/
  48.  
  49. #include <stdio.h>
  50. #include <math.h>
  51. #include <rpc/rpc.h>
  52.  
  53. #ifndef STDLIB
  54. #include <stdlib.h>
  55. #endif
  56.  
  57. #include "satglobalsx.h"
  58. #include "sattrack.h"
  59.  
  60. #ifdef ISI
  61. #include "/usr1/isisoft/src/VxSource/include/globalserver.h"
  62. #endif
  63.  
  64. /******************************************************************************/
  65. /*                                                                            */
  66. /* global fields                                                              */
  67. /*                                                                            */
  68. /******************************************************************************/
  69.  
  70. char *cpu[] = { "vme0", "vme1", "vme2" };              /* real-time computers */
  71.  
  72. /******************************************************************************/
  73. /*                                                                            */
  74. /* external functions                                                         */
  75. /*                                                                            */
  76. /******************************************************************************/
  77.  
  78. #ifdef ISI
  79. extern int remotevar(), trackControl();
  80. #endif
  81.  
  82. /******************************************************************************/
  83. /*                                                                            */
  84. /* initISI: initializes ISI telescope tracking control parameters if the      */
  85. /*          tracking is not running already                                   */
  86. /*                                                                            */
  87. /******************************************************************************/
  88.  
  89. int initISI()
  90.  
  91. {
  92. #ifdef ISI
  93.     long clearFlag, solsysFlag, delayLine, trackFlag, trackingVME;
  94.     long trackingCheck;
  95.     int  i, didInit;
  96.     char objName[80];
  97. #endif
  98.  
  99.     int error;
  100.  
  101.     error = FALSE;
  102.  
  103. #ifdef ISI
  104.  
  105.     trackingCheck = 0L;                    /* check if tracking is ON already */
  106.                                            /* and if 'xobserve' has altered   */
  107.                                            /* the value of 'solsysfl'         */
  108.  
  109.     didInit = FALSE;
  110.  
  111.     for (i = 0; i <= 2; i++)                      /* talk vme0, vme1 and vme2 */
  112.     {
  113.         error += remotevar(cpu[i], "tracking", LONG | READ, &trackingVME);
  114.         trackingCheck += trackingVME;
  115.  
  116.         if (trackingCheck != 0L)
  117.         {
  118.             error += remotevar(cpu[i], "solsysfl", LONG | READ, &solsysFlag);
  119.  
  120.             if (solsysFlag == SATCODE)
  121.             {
  122.                 trackingCheck = 0L;
  123.                 didInit = TRUE;
  124.             }
  125.         }
  126.     }
  127.  
  128.     if (trackingCheck == 0L && !error)
  129.         trackingEnableFlag = TRUE;
  130.     else
  131.     {
  132.         if (verboseFlag)
  133.             printf("\ninitISI: error = %d  solsysFlag = %ld  tCheck = %ld\n",
  134.                 error,solsysFlag,trackingCheck);
  135.  
  136.         return(-1);
  137.     }
  138.  
  139.     switch(trackObject)
  140.     {
  141.         case SUN:                                   /* avoid tracking the Sun */
  142.             if (verboseFlag)
  143.                 printf("\ninitISI: tried to track the Sun\n");
  144.             return(-1);
  145.             break;
  146.  
  147.         case MOON:
  148.             strcpy(objName,"Moon");
  149.             break;
  150.  
  151.         case SAT:
  152.             strcpy(objName,satTrackName);
  153.             break;
  154.  
  155.         default:
  156.             break;
  157.     }
  158.  
  159.     solsysFlag  = SATCODE;
  160.     clearFlag   = 1L;
  161.     trackingVME = 1L;
  162.     delayLine   = 1L;
  163.     trackFlag   = 1L;
  164.     error       = FALSE;
  165.  
  166.     error += remotevar(cpu[0], "srcname", STRING | WRITE, objName);
  167.  
  168.     if (!didInit)
  169.         error += remotevar(cpu[0],"dlyblockflag", LONG | WRITE, &delayLine);
  170.  
  171.     for (i = 0; i <= 2; i++)                      /* talk vme0, vme1 and vme2 */
  172.     {
  173.         if (!didInit)
  174.             error += remotevar(cpu[i], "solsysfl", LONG | WRITE, &solsysFlag);
  175.  
  176.         error += remotevar(cpu[i], "clearflag", LONG | WRITE, &clearFlag);
  177.         error += remotevar(cpu[i], "tracking", LONG | WRITE, &trackingVME);
  178.  
  179.         if (!didInit)
  180.             error += trackControl(cpu[i],trackFlag);
  181.  
  182.         if (verboseFlag && error)
  183.             printf("\ninitISI oho: error = %d (vme%d)\n",error,i);
  184.     }
  185.  
  186. #endif
  187.  
  188.     if (verboseFlag && error)
  189.         printf("\ninitISI end: error = %d\n",error);
  190.  
  191.     return(error);
  192. }
  193.  
  194. /******************************************************************************/
  195. /*                                                                            */
  196. /* stopISI: stops tracking with the ISI telescopes                            */
  197. /*                                                                            */
  198. /******************************************************************************/
  199.  
  200. int stopISI()
  201.  
  202. {
  203. #ifdef ISI
  204.     long solsysFlag, trackFlag, trackingVME;
  205.     int  i;
  206.     char objName[80];
  207. #endif
  208.  
  209.     int error;
  210.  
  211.     error = FALSE;
  212.  
  213. #ifdef ISI
  214.  
  215.     if (!trackingEnableFlag || trackingFlag == ERROR)
  216.     {
  217.         if (verboseFlag)
  218.             printf("\nstopISI: trackingEnableFlage = %d  trackingFlag = %d\n",
  219.                 trackingEnableFlag,trackingFlag);
  220.  
  221.         return(-1);
  222.     }
  223.  
  224.     trackingEnableFlag = FALSE;
  225.  
  226.     error += remotevar(cpu[0], "solsysfl", LONG | READ, &solsysFlag);
  227.  
  228.     if (solsysFlag != SATCODE || error)
  229.     {
  230.         if (verboseFlag)
  231.             printf("\nstopISI: error = %d  solsysFlag = %ld\n",
  232.                 error,solsysFlag);
  233.  
  234.         return(-1);
  235.     }
  236.  
  237.     *objName = '\0';
  238.  
  239.     solsysFlag  = 0L;
  240.     trackingVME = 0L;
  241.     trackFlag   = 0L;
  242.  
  243.     for (i = 0; i <= 2; i++)                   /* talk to vme0, vme1 and vme2 */
  244.     {
  245.         error += remotevar(cpu[i], "srcname", STRING | WRITE, objName);
  246.         error += remotevar(cpu[i], "solsysfl", LONG | WRITE, &solsysFlag);
  247.         error += remotevar(cpu[i], "tracking", LONG | WRITE, &trackingVME);
  248.         error += trackControl(cpu[i],trackFlag);
  249.     }
  250.  
  251. #endif
  252.  
  253.     if (verboseFlag && error)
  254.         printf("\nstopISI end: error = %d\n",error);
  255.  
  256.     return(error);
  257. }
  258.  
  259. /******************************************************************************/
  260. /*                                                                            */
  261. /* controlISI: sends real-time tracking parameters to the ISI telescopes via  */
  262. /*             remote procedure calls                                         */
  263. /*                                                                            */
  264. /*             local geodetic coordinate system for the ISI:                  */
  265. /*             left-handed                                                    */
  266. /*             +X = north,  +Y = east,  +Z = up                               */
  267. /*             therefore the x coordinate needs to be inverted                */
  268. /*                                                                            */
  269. /******************************************************************************/
  270.  
  271. int controlISI()
  272.  
  273. {
  274. #ifdef ISI
  275.     double localVecX, localVecY, localVecZ, azimuth, elevation;
  276.     long   solsysFlag;
  277.     int    i, index;
  278.     char   varName[40];
  279. #endif
  280.  
  281.     int error;
  282.  
  283.     error = FALSE;
  284.  
  285. #ifdef ISI
  286.  
  287.     if (!trackingEnableFlag || trackingFlag == ERROR)
  288.     {
  289.         if (verboseFlag)
  290.             printf("\ncontrolISI: trackingEnableFlag = %d  trackingFlag = %d\n",
  291.                 trackingEnableFlag,trackingFlag);
  292.  
  293.         return(-1);
  294.     }
  295.  
  296.     error += remotevar(cpu[0], "solsysfl", LONG | READ, &solsysFlag);
  297.  
  298.     if (solsysFlag != SATCODE || error)
  299.     {
  300.         if (verboseFlag)
  301.             printf("\ncontrolISI: error = %d  solsysFlag = %ld\n",
  302.                 error,solsysFlag);
  303.  
  304.         return(-1);
  305.     }
  306.  
  307.     switch(trackObject)
  308.     {
  309.         case SUN:                                   /* avoid tracking the Sun */
  310.             if (verboseFlag)
  311.                 printf("\ncontrolISI: tried to track the Sun\n");
  312.             return(-1);
  313.             break;
  314.  
  315.         case MOON:
  316.             localVecX = -localVecMoonGl[0];
  317.             localVecY =  localVecMoonGl[1];
  318.             localVecZ =  localVecMoonGl[2];
  319.             azimuth   =  moonAzimuth;
  320.             elevation =  moonElevation;
  321.             break;
  322.  
  323.         case SAT:
  324.             localVecX = -localVecSatGl[0];
  325.             localVecY =  localVecSatGl[1];
  326.             localVecZ =  localVecSatGl[2];
  327.             azimuth   =  satAzimuth;
  328.             elevation =  satElevation;
  329.             break;
  330.  
  331.         default:
  332.             break;
  333.     }
  334.  
  335.     index = (int) (curYearSec % 20L);           /* ring buffer has 20 entries */
  336.  
  337.     for (i = 0; i <= 2; i++)                   /* talk to vme0, vme1 and vme2 */
  338.     {
  339.         sprintf(varName,"timeindexSat[%d]",index);
  340.         error += remotevar(cpu[i], varName, LONG | WRITE, &curYearSec);
  341.  
  342.         if (i == 0)                                     /* vme0 only          */
  343.         {
  344.             sprintf(varName,"azimuthSat[%d]",index);
  345.             error += remotevar(cpu[i], varName, DOUBLE | WRITE, &azimuth);
  346.  
  347.             sprintf(varName,"altitudeSat[%d]",index);
  348.             error += remotevar(cpu[i], varName, DOUBLE | WRITE, &elevation);
  349.         }
  350.  
  351.         if (i > 0)                                      /* vme1 and vme2 only */
  352.         {
  353.             sprintf(varName,"scrxSat[%d]",index);
  354.             error += remotevar(cpu[i], varName, DOUBLE | WRITE, &localVecX);
  355.  
  356.             sprintf(varName,"scrySat[%d]",index);
  357.             error += remotevar(cpu[i], varName, DOUBLE | WRITE, &localVecY);
  358.  
  359.             sprintf(varName,"scrzSat[%d]",index);
  360.             error += remotevar(cpu[i], varName, DOUBLE | WRITE, &localVecZ);
  361.         }
  362.     }
  363.  
  364. #endif
  365.  
  366.     if (verboseFlag && error)
  367.         printf("\ncontrolISI end: error = %d\n",error);
  368.  
  369.     return(error);
  370. }
  371.  
  372. /******************************************************************************/
  373. /*                                                                            */
  374. /* End of function block sattele.c                                            */
  375. /*                                                                            */
  376. /******************************************************************************/
  377.